#pragma once
#include <iostream>
#include "Connection.hpp"
#include "protocol.h"
#include "calculator.hpp"
using namespace std;
using namespace user_protocol;

class PackageParse
{
public:
    static void Parse(Connection *conn)
    {
        string package;
        Request req;    // 请求
        calculator cal; //
        while (1)
        {
            //直接把消息打出来做测试，发的越多，outbuffer越长
            std::cout << conn->Inbuffer() << " ";
            conn->AppendOut(conn->Inbuffer().c_str()); //把消息都拼到outbuffer
            break;
            // sleep(1);
            // // 1.收到请求后，去报头
            // package = Decode(conn->Inbuffer());
            // if (package.empty())
            //     break;
            // // 2.反序列化
            // req.DeSerialization(package);
            // // 3.得到看得懂的请求，做出回复（在这里就是让Response对象做计算）(业务处理)
            // user_protocol::Response re = cal.Excute(req);
            // // 4.Response计算完成，要返回给Request看得懂的字节流
            // // 序列化
            // string send_str;
            // re.Serialization(&send_str);
            // cout << "——————————————————————————————————————————" << endl;
            // cout << "send_str结果:" << send_str << endl;
            // // 5.给回复添加长度报头
            // send_str = Encode(send_str);

            // //发出去,写到输出缓冲区
            // conn->AppendOut(send_str.c_str());
        }
        // 没发完，还需要再发
        if (!conn->OutbufferEmpty() && conn->_sender != nullptr)
        {
            // conn->_sender(conn);   这种比较直接
            conn->_r->EnableReadWrite(conn->Sockfd(), true, true); // 每次使能enable写事件的关心，会自动触发一次EPOLLOUT
        }
    }
};